

namespace ImryStefanVRP
{
    public enum MoveType { InjectionWhichPerservesBothRoutes, Swap, InjectionWhichRemovesARoute, NoMove };

    /// <summary>
    /// This class stores all information about a change in the solution. Stores so that it is easy to undo if needed.
    /// </summary>
    public class ChangeInSolution
    {
        public ChangeInSolution(double p1)
        {
            totalCostBeforeChange = p1;
            thisMoveType = MoveType.NoMove;
        }

        public MoveType thisMoveType { get; set; } 

        public int routeA { get; set; }
        public int routeB { get; set; } 
        public int spotA { get; set; }
        public int spotB { get; set; }

        public double totalCostAfterChange { get; set; } 
        public double totalCostBeforeChange { get; private set; }
        
        public double prevDemandOnA { get; set; }
        public double prevDemandOnB { get; set; }
        public double nextDemandOnA { get; set; }
        public double nextDemandOnB { get; set; }

        public double prevDistOnA { get; set; }
        public double prevDistOnB { get; set; }
        public double nextDistOnA { get; set; }
        public double nextDistOnB { get; set; }
    }
}